Ukoncenie aplikacie
Otázka od: Martin Kasman
13. 11. 2002 21:20
Mam handle inej aplikacie. Ako ju ukoncim?
Vdaka za kazdu radu.
Odpovedá: Ján Harman
13. 11. 2002 21:51
Mozna by slo pouzit i TerminateProcess, podivej se do helpu.
> Mam handle inej aplikacie. Ako ju ukoncim?
>
> Vdaka za kazdu radu.
>
>
>
Odpovedá: Ján Harman
13. 11. 2002 22:18
prave projizdim toto
http://codecentral.borland.com/codecentral/ccweb.exe/prodcat?prodid=1&catid=
4 a najdi si tam Programmatically closing another application. nevim co to
je, ale treba pomuze.
> Mam handle inej aplikacie. Ako ju ukoncim?
>
> Vdaka za kazdu radu.
>
>
>
Odpovedá: Petr Langer
14. 11. 2002 10:26
No uplne "koser" to nebude nikdy, ale prvni bys te aplikaci mel dat sanci,
aby se ukoncila sama a pokud na to nebude v danem case (dwTimeout) reagovat,
tak ji "odstrelis". Ja pro jistotu posilam WM_CLOSE vsem oknum dane
aplikace, ale nevim, jestli je to nezbytne nutne. mozna by stacilo to poslat
jenom hlavnimu.
Muj kod vypada asi takto (dwPID je Process ID):
function TerminateProcessEnum(Window: HWnd; Data: Longint): Bool; stdcall;
const WM_CLOSE = $10;
var
dwID : DWORD;
retVal : LRESULT;
retRes : DWORD;
begin
GetWindowThreadProcessId(window, @dwID) ; // gets processID to
which the window belongs to
if (dwID = Data) then // if processID for
window = our watched process ID
retVal := SendMessageTimeout(window, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG
And SMTO_BLOCK, 1000, retRes);
Result := true ;
end;
function killProcess(dwPID : DWORD) : integer;
var
hProc : LongWord;
dwRet, dwTimeout : DWORD;
begin
dwTimeout := 5000;
hProc := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, FALSE, dwPID);
EnumWindows(@TerminateProcessEnum, dwPID) ; // enumerate all
windows for process (calls TerminateProcessEnum)
if (WaitForSingleObject(hProc, dwTimeout)<> WAIT_OBJECT_0) then //
check if it is really down
begin
if (TerminateProcess(hProc,0)) then // if not, then just
kill it without remorse
dwRet := 1 // successful kill
else
dwRet := 2; // not successful
end
else
dwRet := 0; // Accepted WM_CLOSE = normal process end
CloseHandle(hProc) ;
Result := dwRet ;
end;
HTH
Petr Langer
----- Original Message -----
From: "Martin Kasman" <martinkasman@centrum.sk>
Subject: Ukoncenie aplikacie
> Mam handle inej aplikacie. Ako ju ukoncim?
Odpovedá: Pavel ZIDEK
16. 11. 2002 6:59
if Handle <> 0 then
PostMessage(Handle, WM_QUIT, 0, 0)
----- Pavel ZIDEK -----
http://www.kopr.cz/delphi, delphi@kopr.cz
> Mam handle inej aplikacie. Ako ju ukoncim?
>
> Vdaka za kazdu radu.
Odpovedá: Petr Vones
17. 11. 2002 14:19
From: "Martin Kasman" <martinkasman@centrum.sk>
> Mam handle inej aplikacie. Ako ju ukoncim?
Handle ceho, procesu po otevreni pomoci jeho Process ID ?
Petr Vones